The present disclosure relates to database query processing and, more specifically, to generating new query access plans to account for changes in computing resource availability.
Databases are well known systems for storing, searching, and retrieving information stored in a computer. One type of database used today is the relational database, which stores data using a set of tables that may be reorganized and accessed in a number of different ways. Relational databases are able to represent relationships between fields within separate tables, facilitating the retrieval of relevant information. Users may access information in relational databases using a relational database management system (DBMS).
Each table in a relational database may include a set of one or more columns with each column typically specifying a name and a data type. A query of a relational database may specify which columns to retrieve data from, how to join the columns together and conditions that must be satisfied for a particular data item to be included in a query result table. Current relational databases may require queries be composed in query languages. A widely used query language is Structured Query Language (SQL). However, other query languages are also used.
Once composed, a query is executed by the DBMS. Typically, the DBMS interprets the query to determine a set of steps that must be carried out to execute the query. These steps are together referred to as a query access plan (e.g., query execution plan). Statistics may be kept pertaining to data stored in a database. Such statistics provide data for building the query access plan. The DBMS may include a query optimizer (such as an SQL optimizer) which may select the query access plan that is likely to be the most efficient. When generated, a query access plan may contain the information necessary to retrieve rows for a query. This may include such details as the tables, indexes, parallelisms, join orders, and temporary tables, as well as the operations (e.g., transforms, sorting, grouping) to perform on each value in a column or row.